﻿Imports System.Data.OracleClient
Imports CGR.Contraloria.Data
Imports CGR.SEGUR.BE

Public Class AplicacionDAL

    Public Function Guardar(ByRef obj As AplicacionBE, ByVal usuario As String) As Boolean

        Using cmd As New OracleCommand("WSEGUR.PG_SEG_APLICACION.PA_SEG_APLICACION_GUARDAR")
            cmd.CommandType = CommandType.StoredProcedure
            Dim op As New OracleParameter("P_CAPP_CODIGO", OracleType.VarChar, 10)
            op.Direction = ParameterDirection.InputOutput
            op.Value = IIf(String.IsNullOrEmpty(obj.Codigo), "N", obj.Codigo)
            cmd.Parameters.Add(op)
            cmd.Parameters.Add("P_CAPP_DESCRIPCION", OracleType.VarChar).Value = If(obj.Descripcion, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_IND_ESTADO", OracleType.VarChar).Value = If(obj.EstadoValor, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_NOMBRE", OracleType.VarChar).Value = If(obj.Nombre, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_SIGLAS", OracleType.VarChar).Value = If(obj.Siglas, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CP_UNO_CODIGO_PROP", OracleType.VarChar).Value = If(obj.UOPropietariaCodigo, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_CONTRASENA", OracleType.VarChar).Value = IIf(String.IsNullOrEmpty(obj.Codigo), "", obj.Contrasena)
            cmd.Parameters.Add("P_CAPP_TIPO_APP", OracleType.VarChar).Value = If(obj.TipoAppCodigo, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAUI_USR", OracleType.VarChar).Value = usuario
            Dim inserta As Boolean = False
            If BaseDatos.Execute(cmd) > 0 Then
                inserta = True
                obj.Codigo = cmd.Parameters("P_CAPP_CODIGO").Value
            End If
            Return inserta
        End Using

    End Function

    Public Function GuardarContrasena(ByRef obj As AplicacionBE, ByVal usuario As String) As Boolean

        Using cmd As New OracleCommand("WSEGUR.PG_SEG_APLICACION.PA_SEG_APLICACION_CONTRASENA")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CAPP_CODIGO", OracleType.VarChar).Value = obj.Codigo
            cmd.Parameters.Add("P_CAPP_CONTRASENA", OracleType.VarChar).Value = obj.Contrasena            
            cmd.Parameters.Add("P_CAUI_USR", OracleType.VarChar).Value = usuario
            Dim inserta As Boolean = False

            If BaseDatos.Execute(cmd) > 0 Then
                inserta = True
            End If
            Return inserta
        End Using

    End Function

    Public Function Eliminar(ByVal Codigo As String, ByVal Usuario As String) As Boolean
        Dim elimina As Boolean = False
        Using cmd As New OracleCommand("WSEGUR.PG_SEG_APLICACION.PA_SEG_APLICACION_CER")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CAPP_CODIGO", OracleType.VarChar).Value = Codigo
            cmd.Parameters.Add("P_CAUDI_USR_UPD", OracleType.VarChar).Value = Usuario
            If BaseDatos.Execute(cmd) > 0 Then
                elimina = True
            End If
        End Using
        Return elimina
    End Function

    Public Function Obtener(ByVal Codigo As String) As AplicacionBE
        Dim obj As New AplicacionBE()
        Using cmd As New OracleCommand("WSEGUR.PG_SEG_APLICACION.PA_SEG_APLICACION_SELID")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CAPP_CODIGO", OracleType.VarChar).Value = Codigo
            cmd.Parameters.Add("C_CURSOR", OracleType.Cursor).Direction = ParameterDirection.Output
            Using dr As OracleDataReader = BaseDatos.GetDataReader(cmd)
                If dr.HasRows Then
                    If dr.Read() Then
                        Utils.CreaObjeto(obj, dr)
                    End If
                End If
            End Using
        End Using
        Return obj
    End Function

    Public Function ListarPaginado(ByVal obj As AplicacionBE,
                                   ByVal tamanoPagina As Integer, ByVal pagina As Integer,
                                   ByVal columnaOrden As String, ByVal orden As String,
                                   ByRef totalPaginas As Integer,
                                   ByRef totalRegistros As Integer) As List(Of AplicacionBE)
        Dim lstObj As New List(Of AplicacionBE)()
        Using cmd As New OracleCommand("WSEGUR.PG_SEG_APLICACION.PA_SEG_APLICACION_SELPAG")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CAPP_DESCRIPCION", OracleType.VarChar).Value = If(obj.Descripcion, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_IND_ESTADO", OracleType.VarChar).Value = If(obj.EstadoValor, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_NOMBRE", OracleType.VarChar).Value = If(obj.Nombre, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_SIGLAS", OracleType.VarChar).Value = If(obj.Siglas, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CP_UNO_CODIGO_PROP", OracleType.VarChar).Value = If(obj.UOPropietariaCodigo, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_TAM_PAGINA", OracleType.Int32).Value = tamanoPagina
            cmd.Parameters.Add("P_PAGINA", OracleType.Int32).Value = pagina
            cmd.Parameters.Add("P_COL_ORDEN", OracleType.VarChar).Value = columnaOrden.ToUpper()
            cmd.Parameters.Add("P_ORDEN", OracleType.VarChar).Value = orden.ToUpper()
            cmd.Parameters.Add("C_RESUMEN", OracleType.Cursor).Direction = ParameterDirection.Output
            cmd.Parameters.Add("C_CURSOR", OracleType.Cursor).Direction = ParameterDirection.Output
            Using dr As OracleDataReader = BaseDatos.GetDataReader(cmd)
                If dr.Read() Then
                    totalPaginas = Convert.ToInt32(dr("TOTAL_PAGINAS"))
                    totalRegistros = Convert.ToInt32(dr("TOTAL_REGISTROS"))
                    dr.NextResult()
                End If
                Utils.CreaLista(lstObj, dr)
                If Not dr Is Nothing AndAlso Not dr.IsClosed Then
                    dr.Close()
                End If
            End Using
        End Using
        Return lstObj
    End Function

    Public Function ListarTodo(ByVal obj As AplicacionBE) As List(Of AplicacionBE)
        Dim lstObj As New List(Of AplicacionBE)()
        Using cmd As New OracleCommand("PG_SEG_APLICACION.PA_SEG_APLICACION_SELTODO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CAPP_DESCRIPCION", OracleType.VarChar).Value = If(obj.Descripcion, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_IND_ESTADO", OracleType.VarChar).Value = If(obj.EstadoValor, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_NOMBRE", OracleType.VarChar).Value = If(obj.Nombre, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_SIGLAS", OracleType.VarChar).Value = If(obj.Siglas, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CP_UNO_CODIGO_PROP", OracleType.VarChar).Value = If(obj.UOPropietariaCodigo, DirectCast(DBNull.Value, Object))            
            cmd.Parameters.Add("C_CURSOR", OracleType.Cursor).Direction = ParameterDirection.Output
            Using dr As OracleDataReader = BaseDatos.GetDataReader(cmd)
                Utils.CreaLista(lstObj, dr)
            End Using
        End Using
        Return lstObj
    End Function

    Public Function ListarTodo(ByVal obj As AplicacionBE, ByVal Usuario As String) As List(Of AplicacionBE)
        Dim lstObj As New List(Of AplicacionBE)()
        Using cmd As New OracleCommand("PG_SEG_USUARIO_SISTEMA.PA_SEG_APLICACION_SIS_SELTODO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CAPP_DESCRIPCION", OracleType.VarChar).Value = If(obj.Descripcion, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_IND_ESTADO", OracleType.VarChar).Value = If(obj.EstadoValor, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_NOMBRE", OracleType.VarChar).Value = If(obj.Nombre, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CAPP_SIGLAS", OracleType.VarChar).Value = If(obj.Siglas, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_CP_UNO_CODIGO_PROP", OracleType.VarChar).Value = If(obj.UOPropietariaCodigo, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("P_USUARIO", OracleType.VarChar).Value = If(Usuario, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("C_CURSOR", OracleType.Cursor).Direction = ParameterDirection.Output
            Using dr As OracleDataReader = BaseDatos.GetDataReader(cmd)
                Utils.CreaLista(lstObj, dr)
            End Using
        End Using
        Return lstObj
    End Function

    Public Function ListarPorUsuario(ByVal CodigoUsuario As String) As List(Of AplicacionRecursoBE)
        Dim lstObj As New List(Of AplicacionRecursoBE)()
        Using cmd As New OracleCommand("PG_SEG_APLICACION.PA_SEG_APLICACION_USUARIO")
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("P_CODIGO_USUARIO", OracleType.VarChar).Value = If(CodigoUsuario, DirectCast(DBNull.Value, Object))
            cmd.Parameters.Add("C_CURSOR", OracleType.Cursor).Direction = ParameterDirection.Output
            Using dr As OracleDataReader = BaseDatos.GetDataReader(cmd)
                Utils.CreaLista(lstObj, dr)
            End Using
        End Using
        Return lstObj
    End Function
End Class
